// mce* {{{
//

function mceHandle ($mceList, event) { /*tinyMCE.handleEvent(event);*/ mceDisable($mceList); }
function mceEnable ($mceList){ $mceList.each(function (i, dom) { tinyMCE.execCommand('mceAddControl', false, dom.id); }); }
function mceDisable ($mceList){ $mceList.each(function (i, dom) { tinyMCE.execCommand('mceRemoveControl', false, dom.id); }); }

//
// mce* }}}

Function.prototype.sleep = function (millisecond_delay) {
	if(window.sleep_delay != undefined) clearTimeout(window.sleep_delay);
	var function_object = this;
	window.sleep_delay = setTimeout(function_object, millisecond_delay);
};

// проверяет определена ли переменная ajax_url, если определена то
// добавит к URL адресу текущей страницы фрагмент url
function get__Url(url) {

	var ajax_url = jQuery("a.js_ajax_url").attr("href");
	if (ajax_url) {
		return ajax_url;
	} else {
		var index = document.URL.indexOf('?');
		var diez = document.URL.indexOf('#');
		var res;
		if (index != -1) {
			u = document.URL.substring(0,index);
			p = document.URL.substring(
				index+1,
				(diez != -1) ? diez : document.URL.length
				);
			res = u + url + '?' + p;
		} else {
			res = (
				(diez != -1)
				? document.URL.substring(0, diez)
				: document.URL
			    )
			    + url
			    /* HACK : 2008-01-23 : lucky
			     * When url contains #, it break ajax queries in the dashboard.js
			     * that constructs invalid urls like: http://server#?param=val
			     * (note request params after #, which must be before)
			     * Therefore i remove # part from the result.
			    + (
				(diez != -1)
				? document.URL.substring(diez, document.URL.length)
				: ''
			    )
			    */
			    ;
		}
		return res;
	}
}

function commentSubmitUrl() {
	return
}

function Lang() {
}

/**
 * Вернуть числительную слова
 *
 * записано 0, записан 1, записаны 3
 *
 * usage:
 *  value + 2 или 3 формы слова:
 *     plural(2, 'пень', 'пня', 'пней');
 *     plural(2, ['пень', 'пня', 'пней']);
 *  value + корень + 2 или 3 суффикса
 *     plural(2, 'п', 'ень', 'ня', 'ней');
 *     plural(2, ['п', 'ень', 'ня', 'ней']);
 */
Lang.prototype.numeral = function(value) {
	var out;
	var forms; // массив словоформ
	var form; // массив словоформ
	if (arguments.length > 2) {
		forms = Array.prototype.slice.call(arguments).slice(1,arguments.length);
	} else {
		forms = arguments[1];
	}

	var d1 = value % 10; // последний занк

	if (d1 == 0) form = 0;
	else if (d1 == 1) form = 1;
	else form = 2;

	switch (forms.length) {
		case 3:
		switch (form) {
		case 0: out = forms[0]; break;
		case 1: out = forms[1]; break;
		case 2: out = forms[2] ? forms[2] : forms[1]; break;
		}
			break;
		case 4:
		switch (form) {
		case 0: out = forms[0]+forms[1]; break;
		case 1: out = forms[0]+forms[2]; break;
		case 2: out = forms[0]+(forms[3] ? forms[3] : forms[2]); break;
		}
			break;
		default:
			out = false;
	}
	return out;
}

/**
 * Вернуть форму слова, согласованную с числовым значением.
 *
 * 1 пень, 3 пня, 128 пней
 *
 * usage:
 *  value + 2 или 3 формы слова:
 *     plural(2, 'пень', 'пня', 'пней');
 *     plural(2, ['пень', 'пня', 'пней']);
 *  value + корень + 2 или 3 суффикса
 *     plural(2, 'п', 'ень', 'ня', 'ней');
 *     plural(2, ['п', 'ень', 'ня', 'ней']);
 */
Lang.prototype.plural = function(value) {
	var out;
	var d1 = value % 10; // последний занк
	var d2 = (value / 10) % 10; // предпоследний знак
	var form;  // форма слова 1, 2 или 3
	var forms; // массив словоформ

	if (arguments.length > 2) {
		forms = Array.prototype.slice.call(arguments).slice(1,arguments.length);
	} else {
		forms = arguments[1];
	}

	if (!forms) return;

	if ((d2 > 1) && (d2 < 2)) { // 10, 11, 12, .. 19
		form = 3;
	} else {
		if (d1 == 1) {
			form = 1;
		} else {
			if (d1 == 2 || d1 == 3 || d1 == 4) {
		form = 2;
			} else { // 5, 6, 7, 8, 9, 0
		form = 3;
			}
		}
	}

	switch (forms.length) {
		case 3:
		switch (form) {
		case 1: out = forms[0]; break;
		case 2: out = forms[1]; break;
		case 3: out = forms[2] ? forms[2] : forms[1]; break;
		}
			break;
		case 4:
		switch (form) {
		case 1: out = forms[0]+forms[1]; break;
		case 2: out = forms[0]+forms[2]; break;
		case 3: out = forms[0]+(forms[3] ? forms[3] : forms[2]); break;
		}
			break;
		default:
			out = false;
	}
	return out;
}


var theLang;
function lang() {
    return theLang ? theLang : (theLang = new Lang());
}

function plural(value) { return lang().plural.apply(lang(), arguments); };

if (!Array.prototype.map)
{
  Array.prototype.map = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var res = new Array(len);
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        res[i] = fun.call(thisp, this[i], i, this);
    }

    return res;
  };
}

function popup_window(url, name, cfg) {
	switch(typeof cfg) {
	    case "object": 
		var tmp = [];
		for (var k in cfg) tmp.push(k+"="+cfg[k]);
		cfg = tmp.join(',');
		break;
	    case "string":  break;
	    case "undefined": 
	    default:
		cfg = 'height=200,width=150'; break;
	}
	if (typeof name == "undefined") name = 'popup';
	var newwindow=window.open(url,name,cfg);
	window.console.log(url, name, cfg);
	if (window.focus) { newwindow.focus() }
	return false;
}

if (typeof console == "undefined"){
  var console = function(){}
  console.log = function(txt){}
}
